using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using BreukenWebsite.Models;

namespace BreukenWebsite.Controllers
{
    public class OpdrachtenController : Controller
    {
        BreukenRepository breukenRepository = new BreukenRepository();

        //
        // GET: /Home/
        [Authorize(Roles = "admin")]
        public ActionResult Index()
        {
            var opdrachten = breukenRepository.FindAllOpdrachten();
            return View("Index", opdrachten);
        }

        //
        // GET: /Home/Details/5
        [Authorize(Roles = "admin")]
        public ActionResult Details(int id)
        {
            var opdracht = breukenRepository.GetOpdracht(id);
            if (opdracht == null)
            {
                return View("NotFound");
            }
            else
            {
                var leerlingen = breukenRepository.FindAllLeerlingenByOpdracht(id);
                ViewData["Leerlingen"] = leerlingen;
                var opdrachtDetails = breukenRepository.FindAllOpdrachtDetailsByOpdracht(id);
                ViewData["OpdrachtDetails"] = opdrachtDetails;
                return View("Details", opdracht);
            }
        }

        //
        // GET: /Home/CreateOpdracht
        [Authorize(Roles = "admin")]
        public ActionResult CreateOpdracht()
        {
            ArrayList alM = new ArrayList();
            alM.Add(1); alM.Add(2); alM.Add(3);
            ViewData["moeilijkheidsgraden"] = new SelectList(alM);
            ArrayList alS = new ArrayList();
            alS.Add(1); alS.Add(2); alS.Add(3); alS.Add(4); alS.Add(5);
            ViewData["maxscores"] = new SelectList(alS);
            return View();
        }

        //
        // POST: /Home/CreateOpdracht
        [Authorize(Roles = "admin")]
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult CreateOpdracht(Opdracht opdracht)
        {
            if (!ModelState.IsValid)
            {
                ArrayList alM = new ArrayList();
                alM.Add(1); alM.Add(2); alM.Add(3);
                ViewData["moeilijkheidsgraden"] = new SelectList(alM);
                ArrayList alS = new ArrayList();
                alS.Add(1); alS.Add(2); alS.Add(3); alS.Add(4); alS.Add(5);
                ViewData["maxscores"] = new SelectList(alS);
                return View();
            }
            else
            {
                breukenRepository.AddOpdracht(opdracht);
                breukenRepository.Save();
                return RedirectToAction("Index");
            }
        }

        //
        // GET: /Home/OpdrachtAddLeerlingen/5
        [Authorize(Roles = "admin")]
        public ActionResult OpdrachtAddLeerlingen(int id)
        {
            var leerlingen = breukenRepository.FindAllLeerlingenNotInOpdracht(id);
            MultiSelectList leerlingenMSL = new MultiSelectList(leerlingen, "leerlingID", "naam");
            ViewData["leerlingen"] = leerlingenMSL;
            return View();
        }

        //
        // POST: /Home/OpdrachtAddLeerlingen/5
        [Authorize(Roles = "admin")]
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult OpdrachtAddLeerlingen(int id, FormCollection form)
        {
            Opdracht opdracht = breukenRepository.GetOpdracht(id);
            string[] selectedValues = (form["leerlingenSelect"]).Split(','); ;
            foreach (string s in selectedValues)
            {
                LeerlingOpdracht leerlingOpdracht = new LeerlingOpdracht();
                leerlingOpdracht.leerlingID = Int32.Parse(s);
                leerlingOpdracht.opdrachtID = id;
                breukenRepository.AddLeerlingOpdracht(leerlingOpdracht);
            }
            breukenRepository.Save();
            return RedirectToAction("Index");
        }

        //
        // GET: /Home/OpdrachtAddOpdrachtDetail/5
        [Authorize(Roles = "admin")]
        public ActionResult OpdrachtAddOpdrachtDetail(int id)
        {
            return View();
        }

        //
        // POST: /Home/OpdrachtAddOpdrachtDetail/5
        [Authorize(Roles = "admin")]
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult OpdrachtAddOpdrachtDetail(int id, OpdrachtDetail opdrachtDetail)
        {
            if (!ModelState.IsValid || opdrachtDetail.opgaveTekst.Length < 1 || opdrachtDetail.oplossingTekst.Length < 1)
            {
                return View();
            }
            else
            {
                Opdracht opdracht = breukenRepository.GetOpdracht(id);
                opdrachtDetail.opdrachtID = id;
                breukenRepository.AddOpdrachtDetail(opdrachtDetail);
                breukenRepository.Save();
                return RedirectToAction("Index");
            }
        }

        //
        // GET: /Delete/5
        [Authorize(Roles = "admin")]
        public ActionResult Delete(int id)
        {
            Opdracht opdracht = breukenRepository.GetOpdracht(id);
            if (opdracht == null)
            {
                return View("NotFound");
            }
            else
            {
                return View(opdracht);
            }
        }

        //
        // POST: /Delete/5
        [Authorize(Roles = "admin")]
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Delete(int id, string confirmButton)
        {
            Opdracht opdracht = breukenRepository.GetOpdracht(id);
            if (opdracht == null)
            {
                return View("NotFound");
            }
            breukenRepository.DeleteOpdracht(opdracht);
            breukenRepository.Save();
            return View("Deleted");
        }

    }
}
